/**
 * 
 */
package org.ccay.personalized.service;

import java.util.List;
import java.util.Map;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import org.ccay.core.exception.ApplicationException;
import org.ccay.personalized.CommonSettingVO;
import org.ccay.personalized.PersonalizedSettingVO;

/**
 * 个性化配置服务类
 * @author chaowangbang
 *
 */
@Path("/setting")
@Produces("application/json")
public interface IPersonalizedSettingService {

	/**
	 * 查询用户所有配置
	 * @param type
	 * @return
	 */
	@GET
	@Path("/list")
	public List<PersonalizedSettingVO> findUserSettings(@QueryParam("") PersonalizedSettingVO settingVO) throws ApplicationException;
	
	
	/**
	 * 查询指定KEY指定用户的个性化配置
	 * @param settingVO 查询条件，KEY使用模糊匹配
	 * @return 个性化配置查询结果
	 * @throws ApplicationException	
	 * @author chaowangbang
	 * @since 2015年1月12日
	 */
	@GET
	@Path("/list/page")
	public List<PersonalizedSettingVO> findPageSettings(@QueryParam("") PersonalizedSettingVO settingVO) throws ApplicationException;


	/**
	 * 保存页面配置，不管是更新还是保存的，限制只能保存100条
	 * @param personalizedSettingVOList
	 * 
	 */
	@PUT
	@Path("/createSingles")
	public void saveUserSettings(List <PersonalizedSettingVO> personalizedSettingVOList) throws ApplicationException;
	
	/**
	 * 保存单个配置，不管是更新还是保存的
	 * @param personalizedSettingVOList
	 */
	@POST
	@Path("/createSingle")
	public void saveUserSetting(PersonalizedSettingVO personalizedSetting) throws ApplicationException;
	
	/**
	 * 删除指定配置
	 * @param key
	 * @param isGlobal
	 * @param labelName
	 */
	@DELETE
	@Path("/delSingle/{settingId}")
	public void deleteUserSetting(@PathParam("settingId")int settingId) throws ApplicationException;
	
	/**
	 * 删除指定多个配置
	 * @param personalizedSettingVOList
	 */
	@PUT
	@Path("/delBatch")
	public void deleteUserSettings(List <PersonalizedSettingVO> personalizedSettingVOList) throws ApplicationException;
	
	
	/**
	 * 获取数据字典 中配置的消息设置
	 * @return
	 * @throws ApplicationException
	 * Created：2013-3-18
	 * @author chaowangbang
	 */
	@GET
	@Path("/list/pushMessage")
	public CommonSettingVO findPushMessageSettings()throws ApplicationException;
	
	/** 查找用户设置
	 * @author chaowangbang
	 * @since 2013-8-16
	 * @return
	 * @throws ApplicationException
	 */
	public List<PersonalizedSettingVO> findCurrentUserSettings() throws ApplicationException;
	
	/** 查找用户的global设置
	 * @author chaowangbang
	 * @since 2013-8-16
	 * @return
	 * @throws ApplicationException
	 */
	public Map<String, Object> findCurrentUserGlobalSettings() throws ApplicationException;
	
	/** 指定个性化中的key值，返回对应的值
	 * @author chaowangbang
	 * @since 2013-9-3
	 * @param key
	 * @param defaultValue
	 * @param globalSetting
	 * @return
	 * @throws ApplicationException
	 */
	public Object findCurrentUserGlobalSettings(String key,String defaultValue,Map<String, Object> globalSetting) throws ApplicationException;
	
}
